﻿using System;

namespace Deferred.Library.Scene.Utilities
{
    /// <summary>
    /// 
    /// </summary>
    public class TerrainTexturePack
    {
        private string lowTextureName;
        private string lowNormalName;
        private string midTextureName;
        private string midNormalName;
        private string highTextureName;
        private string highNormalName;
        private string slopeTextureName;
        private string slopeNormalName;

        /// <summary>
        /// 
        /// </summary>
        public event EventHandler OnTextureNameChanged;

        /// <summary>
        /// 
        /// </summary>
        public string LowTextureName
        {
            get { return lowTextureName; }
            set { lowTextureName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string LowNormalName
        {
            get { return lowNormalName; }
            set { lowNormalName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string MidTextureName
        {
            get { return midTextureName; }
            set { midTextureName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string MidNormalName
        {
            get { return midNormalName; }
            set { midNormalName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string HighTextureName
        {
            get { return highTextureName; }
            set { highTextureName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string HighNormalName
        {
            get { return highNormalName; }
            set { highNormalName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string SlopeTextureName
        {
            get { return slopeTextureName; }
            set { slopeTextureName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public string SlopeNormalName
        {
            get { return slopeNormalName; }
            set { slopeNormalName = value; if (OnTextureNameChanged != null) OnTextureNameChanged(this, EventArgs.Empty); }
        }

        /// <summary>
        /// 
        /// </summary>
        public TerrainTexturePack(TerrainTexturePack originalPack)
        {
            this.lowTextureName = originalPack.lowTextureName;
            this.lowNormalName = originalPack.lowNormalName;
            this.midTextureName = originalPack.midTextureName;
            this.midNormalName = originalPack.midNormalName;
            this.highTextureName = originalPack.highTextureName;
            this.highNormalName = originalPack.highNormalName;
            this.slopeTextureName = originalPack.slopeTextureName;
            this.slopeNormalName = originalPack.slopeNormalName;
        }

        /// <summary>
        /// 
        /// </summary>
        public TerrainTexturePack()
            : this("", "", "", "", "", "", "", "") { }

        /// <summary>
        /// 
        /// </summary>
        public TerrainTexturePack(string lowTextureName, string lowNormalName,
                                  string midTextureName, string midNormalName,
                                  string highTextureName, string highNormalName,
                                  string slopeTextureName, string slopeNormalName)
        {
            this.lowTextureName = lowTextureName;
            this.lowNormalName = lowNormalName;
            this.midTextureName = midTextureName;
            this.midNormalName = midNormalName;
            this.highTextureName = highTextureName;
            this.highNormalName = highNormalName;
            this.slopeTextureName = slopeTextureName;
            this.slopeNormalName = slopeNormalName;
        }
    }
}
